package com.bang.study.sort;

import com.alibaba.fastjson.JSONObject;

/**
 * @Auther: Bang
 * @Date: 2019/9/4 0004 08:54
 * @Description: 选择排序
 *                  表现最稳定的排序算法之一，因为无论什么数据进去都是O(n2)的时间复杂度，所以用到它的时候，数据规模越小越好。
 *                  唯一的好处可能就是不占用额外的内存空间了吧。理论上讲，选择排序可能也是平时排序一般人想到的最多的排序方法了吧。
 *                  选择排序(Selection-sort)是一种简单直观的排序算法。
 *                  它的工作原理：首先在未排序序列中找到最小（大）元素，存放到排序序列的起始位置，
 *                              然后，再从剩余未排序元素中继续寻找最小（大）元素，然后放到已排序序列的末尾。
 *                              以此类推，直到所有元素均排序完毕。 

 */
public class SelectionSort {

    
    public static int[] sort(int [] arr){
        if (arr.length==0) {
            return arr;
        }else{
            for (int i = 0; i < arr.length; i++) {
                int minIndex = i; //保存最小值的索引

                for (int j = i; j < arr.length; j++) {
                    if (arr[j] < arr[minIndex]) {
                        minIndex = j; //找到最小索引
                    }
                }
                // 交换位置
                int temp = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = temp;
            }
            return arr;
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[]{12, 21, 3, 4, 7, 0,3,3};
        System.out.println(arr.length);
        sort(arr);
        System.out.println(JSONObject.toJSONString(arr));
    }
 }
